package net.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.springframework.transaction.annotation.Transactional;

@Entity
@Table(name = "GRADO")
@Transactional
public class Grado implements Serializable {

	private static final long serialVersionUID = 3001845574046170877L;

	@Id
	@Column(name = "uid")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	/**
	 * Nombre
	 */
	@Column(name = "nombre", nullable = false)
	private String nombre;

	/**
	 * Rebaja a aplicar para el grado
	 */
	@Column(name = "rebaja", nullable = false)
	private Double rebaja;

	/**
	 * Indica si es el grado Fuera de Estandar
	 */
	@Column(name = "es_fuera_estandar", nullable = false)
	private boolean fueraEstandar;

	/**
	 * Identificador del sistema
	 */
	@Column(name = "id_sistema", nullable = false)
	private String sistema;

	@OneToMany(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_GRADO", nullable = false)
	private List<ToleranciaRubro> toleranciaRubros = new ArrayList<ToleranciaRubro>();

	public Grado() {
		super();
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Double getRebaja() {
		return rebaja;
	}

	public void setRebaja(Double rebaja) {
		this.rebaja = rebaja;
	}

	public boolean isFueraEstandar() {
		return fueraEstandar;
	}

	public void setFueraEstandar(boolean fueraEstandar) {
		this.fueraEstandar = fueraEstandar;
	}

	public String getSistema() {
		return sistema;
	}

	public void setSistema(String sistema) {
		this.sistema = sistema;
	}

	public List<ToleranciaRubro> getToleranciaRubros() {
		return toleranciaRubros;
	}

	public void setToleranciaRubros(List<ToleranciaRubro> toleranciaRubros) {
		this.toleranciaRubros = toleranciaRubros;
	}

	public boolean equals(Object o) {
		if (o == null)
			return false;
		if (!(o instanceof Grado))
			return false;
		Grado c = (Grado) o;
		if (getSistema() != null && getNombre() != null)
			return getSistema().equals(c.getSistema())
					&& getNombre().equals(c.getNombre());
		return false;
	}

	public String toString() {
		return getSistema() + " - " + getNombre();
	}

	@Override
	public int hashCode() {
		return toString().hashCode();
	}
}
